#!/usr/bin/env python
# Copyright (c) 2017-2018 Qualcomm Technologies International, Ltd.
# The format of this file is documented in CS-00410685-UG / 80-CG297-1

//32Mbit的flash=32 * 1024 *1024bitp;
换成字节即32 * （64*16/8) * 1024 byte = 32 * (64*2) * 1024;
所以 32 * 64 * 1024 即为一半；



{
    "flash_device": {
    "block_size": 64 * 1024,
    "boot_block_size": None,
    "alt_image_offset": 32 * 64 * 1024
},
"encrypt": False,
//使能加密，如果设置为TRUE，那么每一个layout中的"authenticate"也必须设置为true。

"layout": [
//即这里整个要求小于等于上面的alt_image_offset
--------------------------------------------------------------------------------------
    ("curator_fs",      { "capacity" : 1024,  "authenticate": False, "src_file_signed": False}),
	//管理者文件系统，cur_cfg_filesystem.x2p定义，包含频偏之类的
--------------------------------------------------------------------------------------
    ("apps_p0",         { "capacity" : 1024 * 768（64*12=768）,  "authenticate": True, "src_file_signed": True}),
	//P0处理器的image
--------------------------------------------------------------------------------------
    ("apps_p1",         { "capacity" : 1024 * 512（64*8=512）,  "authenticate": False}),
	//P1处理器的image
--------------------------------------------------------------------------------------
//缺少的“audio”存在于ROM当中，所以不需要配置
	
    ("device_ro_fs",    { "capacity" : 4096（1024*4=4096）,  "authenticate": False, "inline_auth_hash": True }),
	//设备只读文件系统，dev_cfg_filesystem.x2p子项定义，产品的配置文件，比如：蓝牙地址
--------------------------------------------------------------------------------------
----下两者都是：读写，
    ("rw_config",       { "capacity" : 128 * 1024（64*2=128）}),
	//读写配置文件，由user_ps_filesystem.x2p子项定义，可以在设备运行时更改。可存储一些用户数据，比如：CVC、EQ之类的数据等
--------------------------------------------------------------------------------------
    ("rw_fs",           { "capacity" : 256 * 1024（64*4=256）}),
	//用于读/写文件系统的flash设备的区域。具体用途？？？
--------------------------------------------------------------------------------------
----下两者都是：只读，配置文件系统 和 文件系统
    ("ro_cfg_fs",       { "capacity" : 64 * 1024,  "authenticate": False}),
	//只读系统配置文件，由fw_cfg_filesystem.x2p子项定义，包含很多是htf文件，有外设IO，USB之类的定义使用、license key的存储等。
--------------------------------------------------------------------------------------
    ("ro_fs",           { "capacity" : 2 * 1024 * 1024（64*32=2*1024）,"authenticate": False})
	//只读系统文件，由customer_ro_filesystem.x2p子项定义，用于存储其他应用程序的数据，比如语音提示、音频子系统的可下载功能包——aptx之类的。
]
}


//编译打印的内存分配文件大小：
Apps SQIF encryption Nonce e1319e622805c31e183932d9debdc745
Section apps_p0 len 558832 : hash d368e50ba8dc4ca5a2760e5f72ca6b0b
Boot Image - offset 0x0, size 0x10000

//整数字节，必须是flash设备页面大小的倍数。对于读写组件，他必须是block_size的倍数。


Image output sections:
Flash offset 0x00010000 size 0x120
Flash offset 0x00020000 size 0x1fd0
Flash offset 0x00030000 size 0x886e0
Flash offset 0x000f0000 size 0x58260
Flash offset 0x00170000 size 0x74
Flash offset 0x00180000 size 0x1000a
Flash offset 0x001e0000 size 0xef18
Flash offset 0x001f0000 size 0x4bea8

//对应上面的配置文件分配

Image Header:
Offset 0x00010000 curator_fs          capacity 0x00010000  size 0x00001fd0  unused 0x0000e030
//偏移地址0x10000，容量即0x20000-0x10000 = 0x10000（0x10000=65536=1024*64）；实际用到的大小0x1fd0（=1024*7），没有用到的大小0xe030（=1024*56），实际占用的仍然是一个存储块。使用中以block_size为单位。
无法再调小：1024*64*1
1

Offset 0x00020000 apps_p0             capacity 0x000c0000  size 0x000886e0  unused 0x00037920
//偏移地址0x20000，容量即0xe0000-0x20000 = 0xc0000（0xc0000=1024*64*12）(768=64*12)；实际用到的大小0x886e0（=1024*545），没有用到的大小0x37920（=1024*222），实际占用的是12个存储块。
——————没有用到的大小是3个block_size（64*3=192） 加 30页，理论可以省略到3个block_size，为了防止后期更新空间问题，应谨慎考虑。但因为这里是P0，一般不会改到，所以还是省略3个block_size。所以容量调整为9个block_size。
调整后大小为：1024*64*9
9

Offset 0x000e0000 apps_p1             capacity 0x00080000  size 0x00058260  unused 0x00027da0
//偏移地址0xe0000，容量即0x160000-0xe0000 = 0x80000（0x80000=1024*64*8）(512=64*8)；实际用到的大小0x58260（=1024*352），没有用到的大小0x27da0（=1024*159），实际占用的是8个存储块。
——————没有用到的大小是2个block_size（64*3=192） 加 31页.保守起见省一个block_size。
调整后大小为：1024*64*7
7

Offset 0x00160000 device_ro_fs        capacity 0x00010000  size 0x00000074  unused 0x0000ff8c
//偏移地址0x160000，容量即0x170000-160000 = 0x10000（0x10000=1024*64*1）；实际用到的大小0x74（一页不到），没有用到的大小0xff8c（=1024*63），实际占用的是1个存储块。
无法再调小：1024*64*1
1

Offset 0x00170000 rw_config           capacity 0x00020000  size 0x0001000a  unused 0x0000fff6
//偏移地址0x170000，容量即0x190000-170000 = 0x20000（0x20000=1024*64*2）；实际用到的大小0x1000a（=1024*64），没有用到的大小0xfff6（=1024*63），实际占用的是2个存储块。
无法再调小：1024*64*2
2

Offset 0x00190000 rw_fs               capacity 0x00040000  size 0x00040000  unused 0x00000000
//偏移地址0x190000，容量即0x1d0000-190000 = 0x40000（0x40000=1024*64*4）；实际用到的大小0x1000a（=1024*64*4），没有用到的大小0x0（=1024*0），实际占用的是4个存储块。
无法再调小：1024*64*4（调小到4个）
4

Offset 0x001d0000 ro_cfg_fs           capacity 0x00010000  size 0x0000ef18  unused 0x000010e8
//偏移地址0x1d0000，容量即0x1e0000-1d0000 = 0x10000（0x10000=1024*64*1）；实际用到的大小0xef18（=1024*59），没有用到的大小0x10e8（=1024*4），实际占用的是1个存储块。
无法再调小：1024*64*1
1

Offset 0x001e0000 ro_fs               capacity 0x00200000  size 0x0004bea8  unused 0x001b4158
//偏移地址0x1e0000，此处运行容量（备份区的便宜地址32 * 64 * 1024）即0x200000-1e0000 = 0x20000（0x20000=1024*64*2）；实际用到的大小0x4bea8（=1024*303），没有用到的大小0x1b4158（=1024*64*27），实际占用的是5个存储块。

6

 apps_p0            Hash ptr    0x100 Hash size  0x886e0
 
 
 
==++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//打开DFU后
Apps SQIF encryption Nonce 536a7a353403b08926bd12ef5ea8e149
Section apps_p0 len 558832 : hash d368e50ba8dc4ca5a2760e5f72ca6b0b
Boot Image - offset 0x0, size 0x10000
Image output sections:
Flash offset 0x00010000 size 0x120
Flash offset 0x00020000 size 0x1fd0
Flash offset 0x00030000 size 0x886e0
Flash offset 0x000c0000 size 0x5828c
Flash offset 0x00130000 size 0x74
Flash offset 0x00140000 size 0x1000a
Flash offset 0x001a0000 size 0xef18
Flash offset 0x001b0000 size 0x4bea8
Image Header:
//最明了的内存占用和分配					分配的容量		实际用掉的大小		剩余的大小
Offset 0x00010000 curator_fs          capacity 0x00010000  size 0x00001fd0  unused 0x0000e030
Offset 0x00020000 apps_p0             capacity 0x00090000  size 0x000886e0  unused 0x00007920
Offset 0x000b0000 apps_p1             capacity 0x00070000  size 0x0005828c  unused 0x00017d74
Offset 0x00120000 device_ro_fs        capacity 0x00010000  size 0x00000074  unused 0x0000ff8c
Offset 0x00130000 rw_config           capacity 0x00020000  size 0x0001000a  unused 0x0000fff6
Offset 0x00150000 rw_fs               capacity 0x00040000  size 0x00040000  unused 0x00000000
Offset 0x00190000 ro_cfg_fs           capacity 0x00010000  size 0x0000ef18  unused 0x000010e8
Offset 0x001a0000 ro_fs               capacity 0x00060000  size 0x0004bea8  unused 0x00014158
 apps_p0            Hash ptr    0x100 Hash size  0x886e0 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 